render: Draw shadows outside of potential push_group() call
authorBenjamin Otte <otte@redhat.com>
Tue, 8 Nov 2016 01:20:40 +0000 (02:20 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 8 Nov 2016 01:32:29 +0000 (02:32 +0100)
Before, the shadows were clipped.

gtk/gtkrenderbackground.c

index c3bc5cd2de7faa2162cc6b4847a431ba3786c78b..f3e09e480a836b25be4fc7e5738eca8205d2bdbe 100644 (file)
@@ -376,6 +376,12 @@ gtk_css_style_render_background (GtkCssStyle      *style,
   cairo_save (cr);
   cairo_translate (cr, x, y);
 
+  /* Outset shadows */
+  _gtk_css_shadows_value_paint_box (box_shadow,
+                                    cr,
+                                    &bg.boxes[GTK_CSS_AREA_BORDER_BOX],
+                                    FALSE);
+
   /*
    * When we have a blend mode set for the background, we cannot blend the current
    * widget's drawing with whatever the content that the Cairo context may have.
@@ -392,12 +398,6 @@ gtk_css_style_render_background (GtkCssStyle      *style,
       cairo_push_group (cr);
     }
 
-  /* Outset shadows */
-  _gtk_css_shadows_value_paint_box (box_shadow,
-                                    cr,
-                                    &bg.boxes[GTK_CSS_AREA_BORDER_BOX],
-                                    FALSE);
-
   _gtk_theming_background_paint_color (&bg, cr, bg_color, background_image);
 
   number_of_layers = _gtk_css_array_value_get_n_values (background_image);
@@ -411,12 +411,6 @@ gtk_css_style_render_background (GtkCssStyle      *style,
       _gtk_theming_background_paint_layer (&bg, idx, cr, blend_mode);
     }
 
-  /* Inset shadows */
-  _gtk_css_shadows_value_paint_box (box_shadow,
-                                    cr,
-                                    &bg.boxes[GTK_CSS_AREA_PADDING_BOX],
-                                    TRUE);
-
   /* Paint back the resulting surface */
   if (needs_push_group)
     {
@@ -425,6 +419,12 @@ gtk_css_style_render_background (GtkCssStyle      *style,
       cairo_restore (cr);
     }
 
+  /* Inset shadows */
+  _gtk_css_shadows_value_paint_box (box_shadow,
+                                    cr,
+                                    &bg.boxes[GTK_CSS_AREA_PADDING_BOX],
+                                    TRUE);
+
   cairo_restore (cr);
 }